package com.springboot.cloud.sysadmin.organization.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.springboot.cloud.sysadmin.organization.entity.param.UserQueryParam;
import com.springboot.cloud.sysadmin.organization.entity.po.User;
import com.springboot.cloud.sysadmin.organization.entity.vo.UserVo;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Set;

/**
 * Created by ZengJian on 2021/2/3 0003 上午 9:22
 */
public interface IUserService {

//    List<User> getUserd(@Param(Constants.WRAPPER) Wrapper wrapper);

    /**
     * 获取用户
     *
     * @param id 用户id
     * @return UserVo
     */
    UserVo get(String id);

    boolean getUser(String id);

    User getByUserId(String id);

    /**
     * 根据用户唯一标识获取用户信息
     * 目前用户标识不用户名或mobile
     *
     * @param uniqueId
     * @return
     */
    User getByUniqueId(String uniqueId);

    /**
     * 新增用户
     *
     * @param user
     * @return
     */
    boolean add(User user);

    String querySql = "SELECT a.*, b.org_id FROM t_game AS a LEFT JOIN t_game_game_org AS b ON b.game_id = a.id ";
    String wrapperSql = "SELECT * from ( " + querySql + " ) AS q ${ew.customSqlSegment}";

    /**
     * 查询用户
     *
     * @return
     */
    IPage<UserVo> query(Page<User> page, UserQueryParam userQueryParam);

    List<User> listUser();

    /**
     * 导出数据
     *
     * @param userList 待导出的数据
     * @param response /
     * @throws IOException /
     */
    void download(List<User> userList, HttpServletResponse response) throws IOException;

    /**
     * 更新用户信息
     *
     * @param user
     */
    boolean update(User user);

    /**
     * 更新用户头像信息
     *
     * @param user
     */
    boolean updateUserAvatar(User user);

    /**
     * 更新用户信息
     *
     * @param user
     */
    boolean updateBasic(User user);

    /**
     * 更新用户信息
     *
     * @param user
     */
    boolean updateUserPwd(User user);

    /**
     * 更新用户状态信息
     *
     * @param user
     */
    boolean updateEnabled(User user);

    /**
     * 根据id删除用户
     *
     * @param ids
     */
    boolean delete(Set<String> ids);

    /**
     * 导入用户数据
     *
     * @param userList        用户数据列表
     * @param isUpdateSupport 是否更新支持，如果已存在，则进行更新数据
     * @param operName        操作用户
     * @return 结果
     */
    public String importUser(List<User> userList, Boolean isUpdateSupport, String operName);

    boolean updateOpenId(String username, String openId);

    User getUserByOpenId(String uniqueId);

    User getAllByUniqueId(String uniqueId);
}
